package com.songlanyun.modules.order.model.dto;

import com.songlanyun.common.drive.ValueObject;
import com.songlanyun.modules.account.model.dto.SelectAreaDTO;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 提交订单时的数据DTO(这样设置为了可以分单)
 */
@Data
public class SubmitOrderDTO implements ValueObject
{
    //是否是后台订单
    private Boolean isAdminOrder = false;

    private Integer orderType = 1;

    private Integer chanelType;
    //用户id
    private Long userId;

    //活动类型营销活动内类型(0无活动，1秒杀，2拼团）
    private Integer marketingType = 0;

    /**
     * 是否是免费申领
     */
    private Boolean free = false;

    //是否来源于购物车
    private Boolean isCart=false;

    //如果是购物车中选择多店的商品那么(出货方式只能是物流,不能是自提)
    //出货方式（0物流，1自提,）
    private Integer shipmentMode = 0;

    //收货地址Id
    private Long receiptId;


    //自提信息
    private SubmitOrderSelfTakeDTO selfTake;

    //提交服务订单时的联系人数据
    private SubmitServiceOrderContactsDTO serviceContacts;

    //多店数据
    private List<SubmitShopOrderDTO> shopOrders;

    //是否是积分兑换商品
    private Boolean pointGoods=false;

    //是否使用公益积分
    private Boolean usePlatformPoint = true;

    //是否是服务体系商品
    private Boolean serviceSystemGoods=false;

    //服务体系商品等级
    private Integer servicePackageArea = 0;

    //选择的服务体系区域
    private List<SelectAreaDTO> selectAreas;

    /**
     * 平台券
     */
    private SubmitOrderUseCoupon platformCoupon = SubmitOrderUseCoupon.buildEmpty();

    // 真实姓名
    private String realName;

    // 身份证号
    private String idNo;

    private BigDecimal randomReduction;



    /**
     * 构造订单提交页说明==============================================================================
     * 1、如果从购物车选择商品确认要购买
     * 情况1，如果只选了一家店的商品那么，出货方式（0物流，1自提）可以根据这家店的设置来定是否有自提
     * 情况2，如果选了多家店的商品要做分单，那么出货方式（0物流），就只有物流可选没有自提
     *

     * 2、如果从商家的商品详情页直接购买，
     * 情况：1、如果商品是直营的，就用SubmitShopOrderDTO中的shopId，来确定物流和自提的方式，
     * 情况：2、如果是代销的就用goods的shopId来确定物流和自提的方式，但是如果购买的商品是代销商品，订单生成后就是代销订单
     *
     * 4、商品的会员折扣都以商品的直营店中会员等级来核算打折价，以及每种商品的总售价（小计）,同时如果是多家店还要分页计算每家店的所购商品的总价
     * 5、商品sku的库存也以当前商品sku的库存来计算是否充足（售清，库存不足10件）
     *
     * 6、总计当前订单购买的商品总费用
     *
     * 6、快递费用的计算
     * 情况 1、如果还没有选择快递，快递费用显示为免邮
     * 情况 2、如果有默认收货地址，就要用默认收货地址计算每家店的运费，再合计到总费用中
     * 情况 3、如果修改了收货地址，就要用新的收货地址计算每家店的运费，再合计到总费用中
     *
     * 7、如选择的是物流，却没有收货地址，前后端都要做安全拦截
     * 8、如果选择的是自提，却没有自提信息，前台端都要做安全拦截
     *
     *
     *
     * 7、首单优惠TODO
     *
     *
     * 订单提交数据说明==============================================================================
     *
     *
     * 合单支付，与分单支付
     * 合单支付只在多店铺一起下单时为使用的到，合单编号生成后需要给每个分店单记录上
     * 生成第三方支付单时
     * 1、给合单支付编号
     * 合单支付成功回调后，改变所有合单的分单订单状态
     * 2、给分单支付编号
     * 只改分单订单状诚
     *
     */

}
